const { app, BrowserWindow, ipcMain, screen, Menu, Tray, nativeImage } = require('electron');
const path = require('path');
const fs = require('fs');

// 全局变量
let mainWindow = null;
let settingsWindow = null;
let aboutWindow = null;
let tray = null;
let config = {};

// 通用窗口管理：在打开新窗口时自动管理主窗口状态
function manageWindowFocus(windowRef, onClose) {
    // 保存主窗口原始状态
    const wasAlwaysOnTop = mainWindow ? mainWindow.isAlwaysOnTop() : false;
    
    // 打开新窗口时：桌宠取消置顶 + 暂停移动
    if (mainWindow) {
        mainWindow.setAlwaysOnTop(false);
        mainWindow.webContents.send('pause-movement', true);
    }
    
    // 窗口关闭时：恢复主窗口状态
    windowRef.on('closed', () => {
        if (onClose) onClose(); // 执行自定义关闭逻辑
        
        // 恢复主窗口置顶和移动
        if (mainWindow) {
            if (wasAlwaysOnTop || config.window?.alwaysOnTop !== false) {
                mainWindow.setAlwaysOnTop(true);
            }
            mainWindow.webContents.send('pause-movement', false);
        }
    });
}

// 加载配置
function loadConfig() {
    try {
        const configPath = path.join(__dirname, 'config.json');
        if (fs.existsSync(configPath)) {
            config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
        }
    } catch (error) {
        console.error('加载配置失败:', error);
    }
    return config;
}

// 防止窗口被关闭后完全退出
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit();
});

// 创建设置窗口
function createSettingsWindow() {
    if (settingsWindow) {
        settingsWindow.focus();
        return;
    }

    settingsWindow = new BrowserWindow({
        width: 700,
        height: 700,
        resizable: false,
        frame: true,
        transparent: false,
        alwaysOnTop: true, // 置顶显示
        skipTaskbar: false,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false
        }
    });

    // 使用通用窗口管理
    manageWindowFocus(settingsWindow, () => {
        settingsWindow = null;
    });

    settingsWindow.setIgnoreMouseEvents(false);
    settingsWindow.loadFile('settings.html');
    settingsWindow.setMenuBarVisibility(false);
    
    settingsWindow.webContents.on('did-finish-load', () => {
        settingsWindow.setIgnoreMouseEvents(false);
    });
}

// 创建关于窗口
function createAboutWindow() {
    if (aboutWindow) {
        aboutWindow.focus();
        return;
    }

    aboutWindow = new BrowserWindow({
        width: 400,
        height: 300,
        resizable: false,
        frame: true,
        transparent: false,
        alwaysOnTop: true, // 置顶显示
        skipTaskbar: false,
        webPreferences: {
            nodeIntegration: true
        }
    });

    // 使用通用窗口管理
    manageWindowFocus(aboutWindow, () => {
        aboutWindow = null;
    });

    aboutWindow.setMenuBarVisibility(false);
    aboutWindow.loadURL(`data:text/html;charset=utf-8,
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <style>
                body {
                    font-family: -apple-system, sans-serif;
                    text-align: center;
                    padding: 50px;
                    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                    color: white;
                    margin: 0;
                }
                h1 { font-size: 32px; margin-bottom: 10px; }
                p { font-size: 16px; line-height: 1.6; margin: 10px 0; }
                .version { opacity: 0.8; margin-top: 20px; }
            </style>
        </head>
        <body>
            <h1>🐱 桌面宠物</h1>
            <p>一个功能强大、高度可定制的桌面宠物应用</p>
            <p>基于 Electron 开发</p>
            <p class="version">版本: 2.2.0</p>
        </body>
        </html>
    `);
}

// 创建系统托盘
function createTray() {
    // 创建托盘图标
    // 注意：你可能需要准备一个 icon.png 文件
    let trayIcon;
    try {
        trayIcon = nativeImage.createFromPath(path.join(__dirname, 'assets', 'tray-icon.png'));
        if (trayIcon.isEmpty()) {
            // 如果图标不存在，使用默认图标
            trayIcon = nativeImage.createEmpty();
        }
    } catch (error) {
        trayIcon = nativeImage.createEmpty();
    }
    
    tray = new Tray(trayIcon);
    tray.setToolTip('桌面宠物');
    
    const contextMenu = Menu.buildFromTemplate([
        {
            label: '⚙️ 设置',
            click: () => {
                createSettingsWindow();
            }
        },
        {
            type: 'separator'
        },
        {
            label: '📖 关于',
            click: () => {
                createAboutWindow();
            }
        },
        {
            type: 'separator'
        },
        {
            label: '🔄 重启应用',
            click: () => {
                app.relaunch();
                app.quit();
            }
        },
        {
            type: 'separator'
        },
        {
            label: '❌ 退出',
            click: () => {
                app.quit();
            }
        }
    ]);
    
    tray.setContextMenu(contextMenu);
    
    // 双击托盘图标打开设置
    tray.on('double-click', () => {
        createSettingsWindow();
    });
}

// 创建右键菜单（用于桌宠）
function createContextMenu() {
    const contextMenu = Menu.buildFromTemplate([
        {
            label: '⚙️ 设置',
            click: () => {
                createSettingsWindow();
            }
        },
        {
            type: 'separator'
        },
        {
            label: '📖 关于',
            click: () => {
                createAboutWindow();
            }
        },
        {
            type: 'separator'
        },
        {
            label: '❌ 退出',
            click: () => {
                app.quit();
            }
        }
    ]);

    return contextMenu;
}

// 创建主窗口
function createWindow() {
    // 加载配置
    loadConfig();

    // 获取主显示器的屏幕尺寸
    const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize;
    
    // 桌宠窗口大小（根据配置）
    const petSize = config.pet?.size || 100;
    const windowSize = petSize + 40; // 给关闭按钮留出空间
    
    // 初始位置：屏幕中央
    const initialX = Math.floor((screenWidth - windowSize) / 2);
    const initialY = Math.floor((screenHeight - windowSize) / 2);
    
    mainWindow = new BrowserWindow({
        width: windowSize,
        height: windowSize,
        x: initialX,
        y: initialY,
        frame: false, // 去掉窗口边框
        transparent: true, // 窗口背景透明
        alwaysOnTop: config.window?.alwaysOnTop !== false, // 始终悬浮在最上层
        hasShadow: false, // 去掉窗口阴影
        skipTaskbar: config.window?.showInTaskbar !== true, // 不在任务栏显示
        resizable: false, // 禁止调整大小
        webPreferences: {
            nodeIntegration: true, // 允许页面使用 Node.js 功能
            contextIsolation: false // 允许渲染进程访问 electron API
        }
    });

    // 发送屏幕尺寸和配置给渲染进程
    mainWindow.webContents.on('did-finish-load', () => {
        mainWindow.webContents.send('screen-size', { width: screenWidth, height: screenHeight });
        mainWindow.webContents.send('config-loaded', config);
    });

    // 加载 HTML 文件
    mainWindow.loadFile('index.html');

    // 可选：打开开发者工具（调试用）
    // mainWindow.webContents.openDevTools();
}

// 监听来自渲染进程的事件
ipcMain.on('close-app', () => {
    app.quit();
});

ipcMain.on('show-context-menu', () => {
    const menu = createContextMenu();
    menu.popup({ window: mainWindow });
});

ipcMain.on('open-settings', () => {
    createSettingsWindow();
});

ipcMain.on('config-updated', (event, newConfig) => {
    config = newConfig;
    // 通知主窗口配置已更新
    if (mainWindow) {
        mainWindow.webContents.send('config-loaded', newConfig);
    }
});

// 监听窗口位置更新（桌宠移动时）
ipcMain.on('update-window-position', (event, { x, y }) => {
    if (mainWindow) {
        mainWindow.setPosition(Math.floor(x), Math.floor(y));
    }
});

// 应用启动后创建窗口和托盘
app.whenReady().then(() => {
    createWindow();
    createTray();
});